package dto

import models "yuanaiproblem/dao/model"

// -------------- 题目生成与编辑请求参数 --------------

// GenerateQuestionRequest 生成题目的请求参数
// 支持 JSON 或表单格式，用于指定生成题目的具体要求
type GenerateQuestionRequest struct {
	// 主题（编程语言+具体关键字）（比如：Go语言+Gin框架）
	Subject string `json:"subject" form:"subject" binding:"required,min=2,max=50"`
	// 题目难度(easy/medium/hard)
	Difficulty string `json:"difficulty" form:"difficulty" binding:"required,oneof=easy medium hard"`
	// 题目类型（single/multiple）单选多选
	Type string `json:"type" form:"type" binding:"required,oneof=single multiple judge essay"`
	// 题目数量
	Count int `json:"count" form:"count" binding:"required,min=1,max=20"`
	// 额外要求
	ExtraPrompt string `json:"extra_prompt" form:"extra_prompt" binding:"max=500"`
}

// SaveQuestionsRequest 保存编辑后题目的请求参数
// 用于提交临时编辑的题目，关联临时ID和题目列表
type SaveQuestionsRequest struct {
	TempID    string            `json:"temp_id" form:"temp_id" binding:"required"`     // 临时编辑标识
	Questions []models.Question `json:"questions" form:"questions" binding:"required"` // 编辑后的题目列表
}

// UpdateQuestionRequest 更新题目的请求参数
// 支持部分字段更新，指针类型表示可选填
type UpdateQuestionRequest struct {
	Title        *string `json:"title" form:"title"`                 // 题目标题（选填）
	QuestionType *string `json:"question_type" form:"question_type"` // 题型（选填）
	Options      *string `json:"options" form:"options"`             // 选项（选填，JSON字符串格式）
	Answer       *string `json:"answer" form:"answer"`               // 答案（选填）
	Explanation  *string `json:"explanation" form:"explanation"`     // 解析（选填）
	Keywords     *string `json:"keywords" form:"keywords"`           // 关键词（选填）
	Language     *string `json:"language" form:"language"`           // 语言（选填）
}

// -------------- 题目查询参数 --------------

// QuestionPageQuery 题目分页查询参数
// 用于指定分页查询的页码和每页条数
type QuestionPageQuery struct {
	Page     int `form:"page" json:"page" default:"1"`            // 页码（默认1）
	PageSize int `form:"page_size" json:"page_size" default:"20"` // 每页条数（默认20）
}

// GenerateQuestionResponse AI生成题目成功的响应实体
type GenerateQuestionResponse struct {
	AIModel   string            `json:"ai_model"`  // 使用的AI模型（如"doubao"、"gpt3"）
	RedisKey  string            `json:"redis_key"` // 临时缓存的Redis键名
	Questions []models.Question `json:"questions"` // 生成的题目列表
	ExpireAt  string            `json:"expire_at"` // 临时缓存过期时间（格式：YYYY-MM-DD HH:MM:SS）
}

// UserQuestionResult 用户题目列表查询结果
type UserQuestionResult struct {
	Count int64             `json:"count"` // 总数量
	List  []models.Question `json:"list"`  // 题目列表
}

// AIConfigResponse 通用AI配置响应结构体
type AIConfigResponse struct {
	Model       string  `json:"model"`       // 模型标识（doubao/tongyi）
	APIKey      string  `json:"api_key"`     // API密钥
	BaseURL     string  `json:"base_url"`    // 接口地址
	ModelName   string  `json:"model_name"`  // 模型名称（如doubao-pro/qwen-turbo）
	Temperature float32 `json:"temperature"` // 生成温度
	MaxTokens   int     `json:"max_tokens"`  // 最大令牌数
	Timeout     int     `json:"timeout"`     // 超时时间（秒）
}

// UpdateAIConfigRequest 更新AI配置的请求结构体
type UpdateAIConfigRequest struct {
	APIKey      string  `json:"api_key,omitempty"`     // 可选更新，为空则不更新
	BaseURL     string  `json:"base_url,omitempty"`    // 可选更新
	ModelName   string  `json:"model_name,omitempty"`  // 可选更新
	Temperature float32 `json:"temperature,omitempty"` // 可选更新，>0才会生效
	MaxTokens   int     `json:"max_tokens,omitempty"`  // 可选更新，>0才会生效
	Timeout     int     `json:"timeout,omitempty"`     // 可选更新，>0才会生效
}
